// let checkerId = 0;      // 定义初始数字，在创建新标签的时候用
const cssText = "position:fixed;pointer-events:none;z-index:-9999;opacity:0;";
let result = true;
let errortext = "浏览器不支持，复制失败";
let neirong = "";
// 主要处理过程
function chuli(value) {
  // 初始化各种状态
  result = true;
  errortext = "浏览器不支持，复制失败";
  let thisdata;
  if (typeof value !== "string") {
    try {
      thisdata = JSON.stringify(value);
    } catch (e) {
      errortext = "数据类型无法转化复制";
      result = false;
      return;
    }
  } else {
    thisdata = value;
  }
  // 将数据暂存
  neirong = thisdata;
  // 创建一个input 元素
  // createElement() 方法通过指定名称创建一个元素，给这个元素添加样式
  const textarea = document.createElement("textarea");
  textarea.value = thisdata; // 将内容赋值给文本域
  textarea.setAttribute("readonly", "");
  textarea.style.cssText = cssText;
  // appendChild() 方法向节点添加最后一个子节点。
  document.body.appendChild(textarea);
  // 选中input元素中的文本
  // select() 方法用于选择该元素中的文本。复制一个完整的判断。
  if (navigator.userAgent.match(/ipad|ipod|iphone/i)) {
    textarea.contentEditable = true;
    textarea.readOnly = true;

    const range = document.createRange();

    range.selectNodeContents(textarea);

    const selection = window.getSelection();

    selection.removeAllRanges();
    selection.addRange(range);
    textarea.setSelectionRange(0, 999999);
  } else {
    textarea.select();
  }

  // 执行浏览器复制命令
  //  execCommand方法是执行一个对当前文档，当前选择或者给出范围的命令
  try {
    const thisvalue = document.execCommand("Copy");
    // 清空输入框
    textarea.remove();
    result = true;
  } catch (err) {
    result = false;
  }
}
function fenfa(el, binding) {
  const { arg, value } = binding;
  switch (arg) {
    case "success":
      if (result) {
        if (value) {
          value(neirong, el);
        } else {
          console.log("复制成功");
        }
      }
      neirong = ""; // 将数据置空
      break;
    case "error":
      if (!result) {
        if (value) {
          value(errortext, el);
        } else {
          console.log(errortext);
        }
      }
      neirong = ""; // 将数据置空
      break;
    default:
      chuli(value);
  }
}

export default {
  mounted: function (el, binding, vnode, oldVnode) {
    el.addEventListener("click", () => {
      fenfa(el, binding);
    });
  },
  unmounted: function (el, binding, vnode, oldVnode) {
    el.addEventListener("click", () => {
      fenfa(el, binding);
    });
  },
};
